Java Technologies Factory Design Pattern Example: Object Creation এর জন্য Factory Design Pattern ব্যবহার গাইড ও নোট

396

Factory Design Pattern একটি ক্রিয়েশনাল প্যাটার্ন যা একটি ক্লাসের দায়িত্ব দেয় নির্দিষ্ট টাইপের অবজেক্ট তৈরি করার জন্য। এটি বিশেষত ব্যবহার করা হয় যখন অবজেক্ট তৈরি করার পদ্ধতি বা প্রক্রিয়া জটিল হয় বা পরিবর্তনশীল হয়, এবং আপনি একাধিক ধরণের অবজেক্ট তৈরি করতে চান একই ইন্টারফেস বা সুপারক্লাস ব্যবহার করে।

এই প্যাটার্নের প্রধান সুবিধা হল, অবজেক্ট তৈরি করার প্রক্রিয়াটি ক্লায়েন্ট কোড থেকে আড়াল করা হয়, এবং ক্লায়েন্ট কেবলমাত্র ফ্যাক্টরি ক্লাসের মাধ্যমে অবজেক্ট তৈরি করে।

উদাহরণ: গাড়ি তৈরির ফ্যাক্টরি

ধরা যাক, আমরা একটি কার ফ্যাক্টরি তৈরি করতে যাচ্ছি যেখানে বিভিন্ন ধরণের গাড়ি তৈরি হবে (যেমন, Sedan, SUV, Truck), এবং আমাদের প্রয়োজন একটি ফ্যাক্টরি প্যাটার্ন যা নির্দিষ্ট গাড়ি টাইপ অনুযায়ী অবজেক্ট তৈরি করবে।

ধাপ ১: গাড়ির ইন্টারফেস

প্রথমে আমরা একটি Car ইন্টারফেস তৈরি করি যেটি গাড়ির জন্য মৌলিক ফাংশনালিটি সংজ্ঞায়িত করবে।

// Car ইন্টারফেস
public interface Car {
    void drive();
}

ধাপ ২: বিভিন্ন গাড়ি ক্লাস

এখন আমরা Car ইন্টারফেস ইমপ্লিমেন্ট করে কিছু নির্দিষ্ট গাড়ি ক্লাস তৈরি করি।

// Sedan গাড়ি
public class Sedan implements Car {
    @Override
    public void drive() {
        System.out.println("Driving a Sedan!");
    }
}

// SUV গাড়ি
public class SUV implements Car {
    @Override
    public void drive() {
        System.out.println("Driving an SUV!");
    }
}

// Truck গাড়ি
public class Truck implements Car {
    @Override
    public void drive() {
        System.out.println("Driving a Truck!");
    }
}

ধাপ ৩: Factory Class

এখন একটি ফ্যাক্টরি ক্লাস তৈরি করি যা বিভিন্ন গাড়ির অবজেক্ট তৈরি করবে।

// CarFactory ক্লাস
public class CarFactory {
    
    // ফ্যাক্টরি মেথড যা নির্দিষ্ট গাড়ি টাইপ অনুযায়ী অবজেক্ট তৈরি করবে
    public static Car getCar(String carType) {
        if (carType == null) {
            return null;
        }
        
        if (carType.equalsIgnoreCase("Sedan")) {
            return new Sedan();
        } else if (carType.equalsIgnoreCase("SUV")) {
            return new SUV();
        } else if (carType.equalsIgnoreCase("Truck")) {
            return new Truck();
        }
        
        return null;
    }
}

ধাপ ৪: ক্লায়েন্ট কোড

এখন ক্লায়েন্ট কোডে ফ্যাক্টরি ব্যবহার করে গাড়ির অবজেক্ট তৈরি করা হবে এবং তাদের drive() মেথড কল করা হবে।

// Main ক্লাস (Client Code)
public class Main {
    public static void main(String[] args) {
        // Sedan তৈরি
        Car sedan = CarFactory.getCar("Sedan");
        sedan.drive(); // Output: Driving a Sedan!
        
        // SUV তৈরি
        Car suv = CarFactory.getCar("SUV");
        suv.drive(); // Output: Driving an SUV!
        
        // Truck তৈরি
        Car truck = CarFactory.getCar("Truck");
        truck.drive(); // Output: Driving a Truck!
    }
}

ব্যাখ্যা:

  1. Car ইন্টারফেস: এখানে একটি সাধারণ Car ইন্টারফেস তৈরি করা হয়েছে যা একটি drive() মেথড ডিক্লেয়ার করেছে। এটি সমস্ত ধরনের গাড়ির জন্য কমন ফাংশনালিটি প্রদান করবে।
  2. গাড়ি ক্লাস: Sedan, SUV, এবং Truck ক্লাসগুলি Car ইন্টারফেসের মাধ্যমে বাস্তবায়িত হয়েছে। প্রতিটি ক্লাসের মধ্যে তাদের নিজস্ব drive() মেথড রয়েছে যা তাদের নিজস্ব বাস্তবায়ন করে।
  3. CarFactory ক্লাস: CarFactory একটি ফ্যাক্টরি ক্লাস যা একটি স্ট্যাটিক মেথড getCar() প্রদান করে। এটি গাড়ির ধরন অনুযায়ী উপযুক্ত ক্লাসের অবজেক্ট তৈরি করে।
  4. ক্লায়েন্ট কোড: Main ক্লাসে, আমরা CarFactory.getCar() মেথডের মাধ্যমে বিভিন্ন ধরনের গাড়ির অবজেক্ট তৈরি করেছি এবং তাদের drive() মেথড কল করেছি।

ফ্যাক্টরি প্যাটার্নের সুবিধা:

  • ক্লায়েন্ট কোডের সহজ ব্যবহার: ক্লায়েন্ট কেবল ফ্যাক্টরি মেথড ব্যবহার করে অবজেক্ট তৈরি করতে পারে, এবং কোনো বাস্তবায়ন জানার প্রয়োজন নেই।
  • নতুন ধরনের গাড়ি যুক্ত করা: যদি আপনি নতুন গাড়ি টাইপ যুক্ত করতে চান, তবে আপনাকে শুধু নতুন একটি ক্লাস তৈরি করতে হবে এবং ফ্যাক্টরি ক্লাসে তা যুক্ত করতে হবে, ক্লায়েন্ট কোডে কোনো পরিবর্তন করার প্রয়োজন নেই।
  • ডিপেনডেন্সি ইনজেকশন: ফ্যাক্টরি প্যাটার্ন অবজেক্ট তৈরির কাজ পৃথক করে দেয়, যা কোডে সুসংগতি বৃদ্ধি করে এবং কোডের মেইন্টেনেবিলিটি উন্নত করে।

ফ্যাক্টরি ডিজাইন প্যাটার্ন একটি খুবই কার্যকর প্যাটার্ন যা অবজেক্ট তৈরির প্রক্রিয়া সহজ করে এবং কোডের পুনঃব্যবহারযোগ্যতা ও মেইন্টেনেবিলিটি বাড়ায়। এটি বিভিন্ন পরিস্থিতিতে ব্যবহার করা যেতে পারে যেখানে অবজেক্ট তৈরি করা একটি জটিল প্রক্রিয়া হতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...